package cn.gok.controller;

import cn.gok.listener.ExcelListener;
import cn.gok.pojo.Examination;
import cn.gok.pojo.Excels;
//import cn.gok.service.AdminService;
import cn.gok.pojo.ExcelsPro;
import cn.gok.service.AdminService;
import cn.gok.service.ExcelsService;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Controller
@RequestMapping("/api/admin/")
public class AdminController {

    //    管理员上传题库（文件上传，保存到本地数据库）
    @Autowired
    private ExcelsService excelsService;

    @Autowired
    private AdminService adminService;

    @PostMapping("/addExcels")
    @ResponseBody
    public JSONObject addExcel(MultipartFile file) {
        //创建JSONObject对象，设置接口返回为json数据
        JSONObject res = new JSONObject();

        try {
            //默认读取第一个sheet表格
//                EasyExcelFactory.read(file.getInputStream(), Excels.class, new ExcelsListener(excelsService)).sheet().doRead();
            //设置表格前三行为表头
            EasyExcel.read(file.getInputStream(), Excels.class, new ExcelListener(excelsService)).sheet().headRowNumber(3).doRead();

        } catch (IOException e) {
            e.printStackTrace();
            res.put("msg", "添加失败,请注意传入的Excel表格的格式");
            return res;
        }
        res.put("msg", "添加成功");
        return res;
    }

    //    管理员要看到所有用户的提交流水（用户提交的记录集成起来，可以按用户名查询，用户只能看到自己的流水，管理员能看到全部人的）
    //管理员查所有卷子，查一套卷子的所有题目，修改题目数据，修改IP，删除题目，删除卷子
    //添加单个题目
    @RequestMapping("/addExam")
    @ResponseBody
    public JSONObject addExam(@RequestBody JSONObject json){
        JSONObject res = new JSONObject();
        ExcelsPro excelsPro=new ExcelsPro();
        excelsPro.setTitle(json.getString("title"));
        excelsPro.setSerial(json.getString("serial"));
        excelsPro.setQuestion(json.getString("question"));
        excelsPro.setAnswer(json.getString("answer"));
        excelsPro.setScore(json.getString("score"));
//        ExcelsPro excelsPro=JSONObject.parseObject(json.getString("excelsPro").toString(),ExcelsPro.class);
        res.put("data",adminService.addExam(excelsPro));
        return res;
    }
    @RequestMapping("/selAll")
    @ResponseBody
    public JSONObject selAll() {
        JSONObject res = new JSONObject();
        res.put("data", adminService.selAll());
        return res;
    }

    //查询单套试卷所有题目
    @RequestMapping("/selExam")
    @ResponseBody
    //用json来接收传过来的title数据
    public JSONObject selExam(@RequestBody JSONObject json) {
        JSONObject res = new JSONObject();
        res.put("data", adminService.selExam(json.getString("title")));
        return res;
    }

    //修改试卷标题以及修改数据库数据
    @RequestMapping("/update")
    @ResponseBody
    public JSONObject update(@RequestBody JSONObject json) {
        JSONObject res = new JSONObject();
//        json.entrySet().forEach(k -> {
//            System.out.println(k.getKey() + "=" + k.getValue() + "." + k.getValue().getClass());
//        });
        Examination examination = new Examination();
        examination.setTitle(json.getString("title"));
        examination.setIp(json.getString("ip"));
        examination.setPorts(json.getString("ports"));
        examination.setDatabases(json.getString("db"));
        examination.setUsername(json.getString("username"));
        examination.setPassword(json.getString("password"));
        examination.setId(json.getInteger("id"));
        res.put("data", adminService.update(examination));
        return res;
    }

    //修改题目
    @RequestMapping("/upexam")
    @ResponseBody
    public JSONObject upexam(@RequestBody JSONObject json) {
        JSONObject res = new JSONObject();
        ExcelsPro excelsPro = new ExcelsPro();
        excelsPro.setQuestion(json.getString("question"));
        excelsPro.setAnswer(json.getString("answer"));
        excelsPro.setScore(json.getString("score"));
        excelsPro.setId(json.getInteger("id"));
        excelsPro.setSerial(json.getString("serial"));
        res.put("data", adminService.upexam(excelsPro));
        return res;
    }

    //删除题库
    @RequestMapping("/deldate")
    @ResponseBody
    public JSONObject deldate(@RequestBody JSONObject json) {
        JSONObject res = new JSONObject();
        res.put("code", adminService.deldate(json.getInteger("id")));
        return res;
    }

    //删除试题里的题目
    @RequestMapping("/delexam")
    @ResponseBody
    public JSONObject delexam(@RequestBody JSONObject json) {
        JSONObject res = new JSONObject();
        res.put("code", adminService.delexam(json.getInteger("id")));
        return res;
    }
//    管理员能看到的相关数据可视化（比如一套题库，完成情况。一个人做了多少题库，频率等等。可以先不做，先把业务工作做完再来整合数据图）
}
